package org.ybxb.demo.config;

import java.util.Collections;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

import io.swagger.v3.oas.models.OpenAPI;
import io.swagger.v3.oas.models.info.Contact;
import io.swagger.v3.oas.models.info.Info;
import io.swagger.v3.oas.models.info.License;

/**
 * @ProjectName: ybxb-demo
 * @PackageName: org.ybxb.demo.config
 * @Description: 这是一个普通的Swagger配置文档，其中不包含API接口的配置(API接口的配置推荐使用注解方式)
 * @Author: hy.bai
 * @Date: 2025-06-24 16:07
 */
@Configuration
/*@OpenAPIDefinition(
        info = @Info( // API的基本信息，包括标题、版本号、描述、联系人等
                title = "Swagger3.0框架学习示例文档",                // Api接口文档标题（必填）
                description = "学习Swagger框架而用来定义测试的文档",   // Api接口文档描述
                version = "1.0.0",                                // Api接口版本
                termsOfService = "https://ybxb.org",              // Api接口的服务条款地址
                contact = @Contact(name = "ybxb",                 // 作者名称
                        email = "1053091115@qq.com",              // 作者邮箱
                        url = "https://ybxb.org"                  // 介绍作者的URL地址
                ),
                license = @License(                                                // 设置联系人信息
                        name = "Apache 2.0",                                       // 授权名称
                        url = "https://www.apache.org/licenses/LICENSE-2.0.html"   // 授权信息
                )
        ),
        // ## 表示服务器地址或者URL模板列表，多个服务地址随时切换（只不过是有多台IP有当前的服务API）
        servers = {@Server(url = "http://192.168.18.1/demo/", description = "本地服务器一服务")},
        externalDocs = @ExternalDocumentation(description = "更多内容请查看该链接", url = "xxx")
)*/
public class OpenApiConfig {

    @Bean // 返回OpenAPI对象
    public OpenAPI createOpenAPI() {
        return new OpenAPI().info(createInfo());
    }

    // 授权许可信息(license),用于描述API的授权许可信息,包括名称、URL等；假设当前的授权信息为Apache 2.0的开源标准
    private License createLicense() {
        return new License().name("Apache 2.0")  // 授权名称
                .url("https://www.apache.org/licenses/LICENSE-2.0.html")  // 授权信息
                .identifier("Apache-2.0")  // 标识授权许可
                .extensions(Collections.emptyMap()); // 使用Map配置信息（如key为"name","url","identifier"）
    }

    /**
     * 联系人信息(contact)，构建API的联系人信息，用于描述API开发者的联系信息，包括名称、URL、邮箱等
     * name：文档的发布者名称 url：文档发布者的网站地址，一般为企业网站 email：文档发布者的电子邮箱
     */
    private Contact createContact() {
        return new Contact().name("ybxb")            // 作者名称
                .email("1053091115@qq.com")          // 作者邮箱
                .url("https://www.ybxb.org")         // 介绍作者的URL地址
                .extensions(Collections.emptyMap()); // 使用Map配置信息（如key为"name","email","url"）
    }

    // 创建Api帮助文档的描述信息、联系人信息(contact)、授权许可信息(license)
    private Info createInfo() {
        return new Info().title("Swagger3.0框架学习示例文档") // Api接口文档标题(必填)
                .description("学习Swagger框架而用来定义测试的文档")       // Api接口文档描述
                .version("v1.0.0")                                   // Api接口版本
                .termsOfService("https://www.ybxb.org")              // Api接口的服务条款地址
                .license(createLicense())                            // 设置联系人信息
                .contact(createContact());
    }
}
